package method;

/**
 * @Author Stringzhua
 * @Date 2024/2/6 20:34
 * description:成员方法的定义
 * public 返回数据类型 方法名{
 * 语句;
 * return 返回值;
 * }
 * 1.形参列表:表示成员方法输入 cal(int n),getSum(int num1,int num2)
 * 2.返回数据类型:表示成员方法输出,void表示没有返回值
 * 3.方法主体:表示为了实现某一功能代码块
 * 4.return 语句不是必须的
 * step1:访问修饰符(作用是控制 方法的使用范围)
 * 如果不写默认访问[四种:public protected 默认 private]
 * step2:返回数据类型
 * 1.一个方法最多有一个返回值 [思考，如何返回多个结果 ?]--->使用数组
 * 2.返回类型可以为任意类型，包含基本类型或引用类型(数组，对象)2.3.
 * 3.如果方法要求有返回数据类型，则方法体中最后的执行语句必须为 return 值;
 * 而且要求返回值类型必须和return的值类型一致或兼容
 * 4.如果方法是void,则方法体中可以没有return语句，或者 只写 return ;
 * step3:方法名
 * 遵循驼峰命名法，最好见名知义，表达出该功能的意思即可,
 * 比如 得到两个数的和getSum,开发中按照规范
 *
 * 成员方法
 * 注意事项和使用细节
 * /形参列表
 * 1.一个方法可以有0个参数，也可以有多个参数，中间用逗号隔开,比如getSum(int n 1,infin2)
 * 2.参数类型可以为任意类型,包含基本类型或引用类型,比如printArr(int[][] map)
 * 3.调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数！(getSum)
 * 4.方法定义时的参数称为形式参数,简称形参;
 * 方法调用时的参数称为实际参数,简称实参,实参和形参的类型要一致或兼容、个数、顺序必须一致！
 * /方法体
 * 里面写完成功能的具体的语句,可以为输入、输出、变量、运算、分支、循环、方法调用,但里面不能再定义方法！
 * 即:方法不能嵌套定义
 *
 * 成员方法
 * /注意事项和使用细节
 * 1.同一个类中的方法调用:直接调用即可.比如print(参数);
 * 案例演示：A类sayOk调用print()
 * 2.跨类中的方法A类调用B类方法:需要通过对象名调用.比如对象名.方法名(参数)；
 * 案例演示:B类sayHelIo调用print()
 * 3.特别说明一下:跨类的方法调用和方法的访问修饰符相关,先暂时这么提一下.后面我们讲到访问修饰符时,还要再细说.
 */
public class MethodDetail {
    public static void main(String[] args) {
        AA a = new AA();
        int[] res = a.getSumAndSub(1, 4);
        for (int i = 0; i < res.length; i++) {
            System.out.println(res[i]);
        }
        System.out.println("和=" + res[0]);
        System.out.println("差=" + res[1]);
        //细节:调用带参数的方法时,一定对应着参数列表传入相同类型或者兼容类型的参数
        byte b1=1;
        byte b2=2;
        a.getSumAndSub(b1,b2);//byte-->int
        //a.getSumAndSub(1.1,1.8);//double-->int(×)
        //细节:实参和形参的类型要一致或兼容、个数、顺序必须一致
        //a.getSumAndSub(100);//x 个数不一致
        a.f3("tom",10);//ok
        //a.f3(100,"jack");//实际参数和形式参数顺序不对
    }
}

class AA {
    //细节:方法不能嵌套定义
    public void f4(){
//错误
//        public void f5(){
//
//        }
    }
    public void f3(String str,int n){

    }
    //1.一个方法最多有一个返回值 [思考，如何返回多个结果 ?]--->使用数组
    public int[] getSumAndSub(int n1, int n2) {
        int[] resArr = new int[2];//创建一个数组
        resArr[0] = n1 + n2;
        resArr[1] = n1 - n2;
        return resArr;
    }
    //2.返回类型可以为任意类型，包含基本类型或引用类型(数组，对象)
    //看getSumAndSub
    //3.如果方法要求有返回数据类型，则方法体中最后的执行语句必须为 return 值;
    //而且要求返回值类型必须和return的值类型一致或兼容
    public int f1() {
        double d1 = 1.1 * 3;
        int n = 100;
        return n;//int-->double
        //return d1;//double-->int(×)
    }
//如果方法是void,则方法体中可以没有return语句,或者只写return
    //实际工作中,方法都是为了完成某个功能,所以方法名要有一定含义
    //最好见名知意
    public void f2() {
        System.out.println("hello1");
        System.out.println("hello1");
        System.out.println("hello1");
        int n = 10;

        return;
    }
}